const KOA = require('koa')
const path = require('path')
/**用于上传文件，解析表单书数据 */
const { koaBody } = require('koa-body')
/**参数校验 */
const parameter = require('koa-parameter')
/**静态资源服务器 */
const KoaStatic = require('koa-static')
const autoRegisterRoutes = require('../router')
const errorHandler = require('./errorHandler')
const { UPLOAD_DIR } = require('../config/config.default')
// 1.创建app
const app = new KOA()
// 2.应用中间件

// 设置上传文件,注意需要卸载路由前面(关键)
app.use(koaBody({
  multipart: true,//允许上传文件
  formidable: {
    // 在配制选项option里, 不推荐使用相对路径
    // 在option里的相对路径, 不是相对的当前文件. 相对process.cwd()
    uploadDir: path.join(__dirname, UPLOAD_DIR), //设置文件路径
    keepExtensions: true,//是否保留文件扩展名，
  },
  // 默认情况下，koa-body以下请求参数不添加到request.body下，需要声明
  parsedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'],
}))
app.use(KoaStatic(path.join(__dirname, UPLOAD_DIR)))
/**在路由之前注册中间件，即在原型上注册一个verifyParams方法 */
app.use(parameter(app))
autoRegisterRoutes(app)
//3.应用错误处理中间件
app.on('error', errorHandler)
// 4.导出应用
module.exports = app